// miniprogram/pages/word/test/test.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    total: null, //总进度
    current: null, //目前进度
    replied: false, //是否回答
    replyIndex: null, //具体回答的选择
    progress: "", //进度条"61.8%"
    data: null,
    word: null,
    options: null,
    right: 0,
    wrong: 0,
    title: "测验",
  },

  /**
   * 模态出现之后
   */
  hideModal() {
    wx.navigateBack({
      delta: 1,
    })
  },

  /**
   * 把当前页单词加入错题本
   */
  addMistake() {
    const thiz = this
    //添加回答错误
    thiz.setData({
      wrong: thiz.data.wrong + 1
    })

    wx.cloud.callFunction({
      // 要调用的云函数名称
      name: 'addWrong',
      // 传递给云函数的参数
      data: {
        word_id: thiz.data.word.word_id
      },
      success: res => {
        // output: res.result === 3
        if (res.result.msg == 'add') {
          console.log("添加错题成功")
        } else if (res.result.msg == 'update') {
          console.log("添加失败,已经在错题本中")
        } else {
          console.log("调用云函数成功，返回值未知")
        }
      },
      fail: err => {
        // handle error
        console.log("调用云函数失败")
      }
    })
  },

  /**
   * 点击回答，让所有不可再点击。
   * 如果回答正确，延迟后，进入下一个页面
   * 如果回答错误，错误+1，延迟后，再进入到下一个页面
   * 回答最后一个进入examEnd
   */
  answer(e) {
    console.log("answer's tap event", e)
    const thiz = this
    const option = e.currentTarget.dataset.item
		const index = e.currentTarget.dataset.index
    if (thiz.data.replied) { //回答后，按钮无效化
      return
    }
    this.setData({
      replied: true,
      replyIndex: index
    })
    console.log("this.data", this.data)
    if (option != this.data.key) { //回答错误
      this.addMistake()
    }

    if (option == this.data.key) {
      this.setData({
        right: this.data.right + 1
      })
    }


    //延迟后，更新本页数据
    setTimeout(function() {
      let current = thiz.data.current + 1
      if (current > thiz.data.total) { //回答最后一个
        //TODO 回答结束后如何??
        let right = thiz.data.right
        let wrong = thiz.data.wrong
        wx.navigateTo({
          url: '/pages/word/examEnd/examEnd?right=' + right +
            '&wrong=' + wrong,
        })
        return
      }
      //获取下一个的数据
      wx.cloud.callFunction({
        // 要调用的云函数名称
        name: 'getQuestion',
        // 传递给云函数的参数
        data: {
          word_id: thiz.data.data[current - 1].word_id,
        },
        success: res => {
          // output: res.result === 3
          console.log("点击答案后，getQuestion success", res)
          thiz.setData({
            word: res.result.word,
            question: res.result.question,
            key: res.result.key,
            options: res.result.options,
            current: current, //目前进度
            replied: false, //是否回答
						replyIndex: null,
          })
          thiz.setProgress(thiz.data.current, thiz.data.total)
        },
        fail: err => {
          // handle error
          console.log("点击答案后，getQuestion fail", err)
        },
        complete: () => {
          // ...
        }
      })
    }, 1000) //1000表示延时1000ms
  },

  /**
   * 点击跳转详情界面
   */
  detail: function(e) {
    if (this.data.word.word_id == null) {
      wx.showModal({
        title: '错误',
        content: '单词id不存在'
      })
      return
    }
    wx.navigateTo({
      url: '/pages/word/detail/detail?wordId=' + this.data.word.word_id
    });
  },

  back: function(e) {
    wx.navigateBack({})
  },


  /**
   * 从服务器获取Data，并设置在本页面的data属性中
   */
  getDataAndSet() {
    const thiz = this
    if (wx.getStorageSync("reviewNumber")) {
      wx.cloud.callFunction({
        // 要调用的云函数名称
        name: 'contest',
        // 传递给云函数的参数
        data: {
          num: wx.getStorageSync("reviewNumber"),
        },
        success: res => {
          // output: res.result === 3
          console.log("callCloudFunction review success", res)
          const data = res.result.words
          thiz.setData({
            data: data
          })
          if (data.length != 0) { //有需要背的单词
            //请求getQuestion
            wx.cloud.callFunction({
              // 要调用的云函数名称
              name: 'getQuestion',
              // 传递给云函数的参数
              data: {
                word_id: data[0].word_id,
              },
              success: res => {
                // output: res.result === 3
                console.log("callCloudFunction getQuestion success", res)
                thiz.setData({
                  total: data.length,
                  current: 1,
                  word: res.result.word,
                  question: res.result.question,
                  key: res.result.key,
                  options: res.result.options
                })
                thiz.setProgress(thiz.data.current, thiz.data.total)
              },
              fail: err => {
                // handle error
                console.log("callCloudFunction getQuestion fail", err)
              },
              complete: () => {
                // ...
              }
            })
          } else {
            this.setData({
              modalName: 'warning'
            })
          }
        },
        fail: err => {
          // handle error
          console.log("callCloudFunction review err", err)
        },
        complete: () => {
          // ...

        }
      })

    } else {
      console.log("review数量为空", wx.getStorageSync("review"))
    }


  },


  /**
   * 设置进度条
   */
  setProgress(current, total) {
    var number = (current - 1) / total
    var percent = this.toPercent(number) + ""
    console.log("percent", percent)
    this.setData({
      progress: percent
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    const thiz = this
    this.getDataAndSet()
    this.setProgress()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  },

  /**
   * 小数转化为百分数字符串。
   */
  toPercent: function(point) {
    var str = Number(point * 100).toFixed(1);
    str += "%";
    return str;
  },
})